<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <script>
    var a = [1, [2, [3, 4, 5, [6,7,8]]]];

    function flat1(arr) {
      const res =[]
      for(let i=0; i< arr.length; i++) {
        const item = arr[i]
        if(Array.isArray(item)) {
          res.push(...flat(item))
        }else{
          res.push(item)
        }
      }
      return res
    }

    function flat2(arr) {
      let res = arr.reduce((ret, item)=> {
        ret = ret.concat( Array.isArray(item) ? flat(item) : item )
        return ret
      }, []) 
      return res      
    }
    
    function flat(arr) {
      return arr.flat(Infinity)
    }

    console.log(flat(a))
  </script>
</body>
</html>